/*
 * ========================================================
 * Copyright(c) 2014 杭州龙骞科技-版权所有
 * ========================================================
 * 本软件由杭州龙骞科技所有, 未经书面许可, 任何单位和个人不得以
 * 任何形式复制代码的部分或全部, 并以任何形式传播。
 * 公司网址
 * http://www.hzdracom.com/
 * ========================================================
 */
package com.shwread.android.ui.page;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JavascriptInterface;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.ciko.code.constant.Constants;
import com.ciko.code.utils.Base64;
import com.ciko.code.utils.LogUtils;
import com.mywork.WorkUIKit;
import com.shwread.android.qysw.activity.BaseBusinessActivity;
import com.shwread.android.qysw.activity.BookDetailActivity;
import com.shwread.android.qysw.activity.LocationActivity;
import com.shwread.android.qysw.activity.MainActivity;
import com.shwread.android.qysw.activity.WebViewActivity;
import com.shwread.android.qysw10000204.R;
import com.tgx.tina.android.ipc.framework.IUIPage;

import base.tina.core.task.infc.ITaskResult;
import logic.bean.BookInfo;
import logic.constants.DefaultConsts;
import logic.util.Util;
import logic.util.logutil.LogUtil;


/**
 * @Project： Lqyd_Android
 *
 * @Title：BoutiquePage
 * @Description：微商城页面 ///////房产在线
 * @Author：wayne
 * @Date：2014年8月11日上午10:42:19
 */
public class StorePage
		extends
		AbstractUIPage<MainActivity>
		implements
		OnClickListener
{
	//	private static final String	URL		 = "http://42.121.255.86/qyyd/file/10000154/index.html";
	private static final String	URL			 = "http://42.121.255.86/qyyd/file/10000150/shanghui/user_center.html";
	private String				completedUrl = "";
	public static boolean		isReload	 = true;
	private TextView			tvTitle;
	private ImageView			ivPersion;
	private WebView				wvWeb;
	//	private RelativeLayout      rlayUnread;
	private Button				btnAdd;
	private static StorePage instance;

	public static StorePage getInstance(MainActivity t) {
		if (instance == null)
			instance = new StorePage(t);
		return instance;
	}

	public static void destroy() {
		if (instance != null)
		{
			instance.dispose();
			instance = null;
		}
	}

	@Override
	public void dispose() {
		super.dispose();
		if (null != wvWeb)
			wvWeb.destroy();
	}

	public StorePage(MainActivity t) {
		super(t);
	}

	@Override
	public <T extends Activity> View createView(T t, int initializers) {
		if (curMyView != null) { return curMyView; }

		curMyView = bActivity.getLayoutInflater().inflate(R.layout.news_lay, null);

		initView();
		setListener();
		setWebView();
		setListener();

		return curMyView;
	}

	@SuppressLint ("SetJavaScriptEnabled")
	private void setWebView() {
		/*
		 * webSettings 保存着WebView中的状态信息。
		 * 当WebView第一次被创建时，webSetting中存储的都为默认值。
		 * WebSetting和WebView一一绑定的。
		 * 如果webView被销毁了，那么我们再次调用webSetting中的方法时，会抛出异常。
		 */
		WebSettings webSettings = wvWeb.getSettings();
		//允许在webview中执行JavaScript代码
		webSettings.setJavaScriptEnabled(true);
		//设置webview是否支持缩放
		webSettings.setSupportZoom(false);

		final String addStr = URL.indexOf("?") == -1 ? "?" : "&";
		//		wvWeb.loadUrl(URL + addStr + "time=" + System.currentTimeMillis());
		completedUrl = URL + addStr + "account=" + WorkUIKit.getUser().getAccount() + "&accountType=" + Constants.ACCOUNT_TYPE + "&clientType=" + Constants.CLIENTTYPE + "&timeStamp=" + System.currentTimeMillis() + "&enterpriseId=" + Constants.enterprise_num + "&cid=" + cid(
				WorkUIKit.getUser().getAccount() + Constants.ACCOUNT_TYPE + Constants.CLIENTTYPE + String.valueOf(
						System.currentTimeMillis()) + Constants.enterprise_num);
		wvWeb.loadUrl(completedUrl);//		wvWeb.loadUrl("http://121.41.18.34:555/lqsw_website/tradeLeadsIndex.do?account=15267103223&accountType=1&clientType=ios_1.1.1&timeStamp=122121212&enterpriseId=10000000&cid=1234567890");
		wvWeb.setWebChromeClient(new HarlanWebChromeClient());
		wvWeb.setWebViewClient(new HarlanWebViewClient());

		/*
		 * 为js提供一个方法，注意该方法一般不写在UI线程中
		 * addJavascriptInterface(Object obj, String interfaceName)
		 * obj代表一个java对象，这里我们一般会实现一个自己的类，类里面提供我们要提供给javascript访问的方法
		 * interfaceName则是访问我们在obj中声明的方法时候所用到的js对象，调用方法为window.interfaceName.
		 * 方法名(
		 * )
		 */
		wvWeb.addJavascriptInterface(new SubMaintenanceJavaScriptInterface(), "qyreader");
	}

	private void gotoBookDetail(String bookId) {
		BookInfo info = new BookInfo();
		info.setBookId(Long.parseLong(bookId));
		info.setContent_type("1");
		Intent intent = new Intent(bActivity, BookDetailActivity.class);
		intent.putExtra("BookInfo", info);
		bActivity.startActivity(intent);
	}

	final class SubMaintenanceJavaScriptInterface
	{
		/** 人保网点 */
		@JavascriptInterface
		public void openLocation() {

			bActivity.getUIHandler().post(new Runnable()
			{
				@Override
				public void run() {
					bActivity.startActivity(new Intent(bActivity, LocationActivity.class));
				}
			});

		}

		/** 在屏幕下端提示用户 */
		@JavascriptInterface
		public void openNewsDetail(final String url, final String title) {
			BaseBusinessActivity.uiHandler.post(new Runnable()
			{
				@Override
				public void run() {

					LogUtil.d("fw", "url：" + url);
					sendToastMessage(url, title);
				}
			});

		}

		/** 在屏幕下端提示用户 */
		@JavascriptInterface
		public void openNewsDetail(final String url) {
			BaseBusinessActivity.uiHandler.post(new Runnable()
			{
				@Override
				public void run() {

					LogUtil.d("fw", "url：" + url);
					sendToastMessage(url, tvTitle.getText().toString());
				}
			});

		}

		@JavascriptInterface
		public void openBookDetail(String bookId) {
			Message msg = Message.obtain();
			msg.what = DefaultConsts.GO_BOOKDETAIL;
			Bundle bundle = new Bundle();
			bundle.putString("bookId", bookId);
			msg.setData(bundle);
			bActivity.getUIHandler().sendMessage(msg);
		}

		/** 提供给B端打印日志 */
		public void fireLog(String log) {
			LogUtil.d("fw", log);
		}

		/**
		 * 假如有历史记录 回退历史记录 否则退出容器
		 */
		public void goBack() {
			BaseBusinessActivity.uiHandler.post(new Runnable()
			{
				@Override
				public void run() {
					bActivity.onBackPressed();
				}
			});
		}
	}

	@Override
	public void notifyView(int cmd, Bundle bundle) {
		switch (cmd) {
			case DefaultConsts.UPDATEUI_FROM_NEWS_TODETAIL:
				//				String url = bundle.getString(DefaultConsts.read_news_url_s);
				String url = bundle.getString(DefaultConsts.read_news_url_s);
				String title = bundle.getString("title");
				gotoNewsDetail(url, title);
				break;
			case DefaultConsts.GO_BOOKDETAIL:
				String bookId = bundle.getString("bookId");
				gotoBookDetail(bookId);
				break;
			default:
				break;
		}
	}

	private void sendToastMessage(String url, String title) {
		Message msg = Message.obtain();
		msg.what = DefaultConsts.UPDATEUI_FROM_NEWS_TODETAIL;
		Bundle bundle = new Bundle();
		bundle.putString(DefaultConsts.read_news_url_s, url);
		bundle.putString("title", title);
		msg.setData(bundle);
		bActivity.getUIHandler().sendMessage(msg);
	}

	protected String cid(String value) {
		if (WorkUIKit.getUser() != null)
		{
			LogUtils.e("自己cid = " + WorkUIKit.getUser().getKey());
			return Base64.base64Encode(value, Constants.SERVER_ENCRYPTKEY, "UTF-8");
		}
		else
		{
			LogUtils.e(Constants.SERVER_ENCRYPTKEY);
			return Base64.base64Encode(value, Constants.SERVER_ENCRYPTKEY, "UTF-8");
		}
	}

	private void gotoNewsDetail(String url, String title) {
		Intent intent = new Intent(bActivity, WebViewActivity.class);
		intent.putExtra(DefaultConsts.title_s, title);
		intent.putExtra(DefaultConsts.req_url_s, url);
		bActivity.startActivity(intent);
		isReload = false;
	}

	@Override
	public int enter(IUIPage<?> prePage) {
		if (isReload)
		{
			final String addStr = URL.indexOf("?") == -1 ? "?" : "&";
			//			wvWeb.loadUrl("http://121.41.18.34:555/lqsw_website/tradeLeadsIndex.do?account=15267103223&accountType=1&clientType=ios_1.1.1&timeStamp=122121212&enterpriseId=10000000&cid=1234567890");
			//			wvWeb.loadUrl(URL + addStr + "time=" + System.currentTimeMillis());
			wvWeb.loadUrl(completedUrl);
		}
		return 0;
	}

	@Override
	public int leave(IUIPage<?> nextPage) {

		return 0;
	}

	private void initView() {
		btnAdd.setVisibility(View.GONE);
		wvWeb = (WebView) curMyView.findViewById(R.id.news_wv);
		tvTitle = (TextView) curMyView.findViewById(R.id.common_header_name);
		tvTitle.setText("会员");
		ivPersion = (ImageView) curMyView.findViewById(R.id.common_header_persion);
		ivPersion.setVisibility(View.VISIBLE);

		//		rlayUnread = (RelativeLayout) curMyView.findViewById(R.id.common_header_msg_layout);
		//		rlayUnread.setVisibility(View.VISIBLE);
		//		rlayUnread.setOnClickListener(new OnClickListener()
		//		{
		//
		//			@Override
		//			public void onClick(View v) {
		//				//				MessagePage messagePage = MessagePage.getInstance(bActivity);
		//				//				bActivity.changePage(messagePage, DEFAULT_STATUS);
		//				bActivity.startActivity(new Intent(bActivity, MessageActivity.class));
		//			}
		//		});
	}

	void setListener() {
		ivPersion.setOnClickListener(StorePage.this);
		btnAdd.setOnClickListener(this);
	}

	/***
	 * webChromeClient主要是将javascript中相应的方法翻译成android本地方法
	 * 例如：我们重写了onJsAlert方法，那么当页面中需要弹出alert窗口时，便
	 * 会执行我们的代码，按照我们的Toast的形式提示用户。
	 */
	class HarlanWebChromeClient
			extends
			WebChromeClient
	{

		/*
		 * 此处覆盖的是javascript中的alert方法。
		 * 当网页需要弹出alert窗口时，会执行onJsAlert中的方法
		 * 网页自身的alert方法不会被调用。
		 */
		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
			Util.showToast(bActivity, message);
			/*
			 * 此处代码非常重要，若没有，android就不能与js继续进行交互了，
			 * 且第一次交互后，webview不再展示出来。
			 * result：A JsResult to confirm that the user hit enter.
			 * 我的理解是，confirm代表着此次交互执行完毕。只有执行完毕了，才可以进行下一次交互。
			 */
			result.confirm();
			return true;
		}

		/*
		 * 此处覆盖的是javascript中的confirm方法。
		 * 当网页需要弹出confirm窗口时，会执行onJsConfirm中的方法
		 * 网页自身的confirm方法不会被调用。
		 */
		@Override
		public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
			return true;
		}

		/*
		 * 此处覆盖的是javascript中的confirm方法。
		 * 当网页需要弹出confirm窗口时，会执行onJsConfirm中的方法
		 * 网页自身的confirm方法不会被调用。
		 */
		@Override
		public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
			return true;
		}

		/*
		 * 如果页面被强制关闭,弹窗提示：是否确定离开？
		 * 点击确定 保存数据离开，点击取消，停留在当前页面
		 */
		@Override
		public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
			return true;
		}
	}

	class HarlanWebViewClient
			extends
			WebViewClient
	{
		/*
		 * 点击页面的某条链接进行跳转的话，会启动系统的默认浏览器进行加载，调出了我们本身的应用
		 * 因此，要在shouldOverrideUrlLoading方法中
		 */
		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			//使用当前的WebView加载页面
			view.loadUrl(url);
			return true;
		}

		/*
		 * 网页加载完毕(仅指主页，不包括图片)
		 */
		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			super.onPageStarted(view, url, favicon);
		}

		/*
		 * 网页加载完毕(仅指主页，不包括图片)
		 */
		@Override
		public void onPageFinished(WebView view, String url) {
			super.onPageFinished(view, url);
		}

		/*
		 * 加载页面资源
		 */
		@Override
		public void onLoadResource(WebView view, String url) {
			super.onLoadResource(view, url);
		}

		/*
		 * 错误提示
		 */
		@Override
		public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
			super.onReceivedError(view, errorCode, description, failingUrl);
		}
	}

	@Override
	public void setStatus(int arg0) {

	}

	@Override
	public View updateView(int arg0, ITaskResult arg1) {
		return null;
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
			case R.id.common_header_persion:
				bActivity.goPersonalActivity();
				break;
		}
	};

}
